]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
iconGrid: Don't hide children inside allocation loop
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 6 Jun 2019 21:21:13 +0000 (23:21 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Sat, 15 Jun 2019 12:31:50 +0000 (12:31 +0000)
Hiding a child implies a parent reallocation, and IconGrid does it for the
children that doesn't fit in the available space, but this could lead to an
allocation recursion cycle. This has been introduced by commit 0e0574a0 to
reduce CPU usage not to using JS vfuncs.

To avoid this, toggle the children opacity instead so that we can achieve the
same visibility result, without any reallocation need.
In this way we also fix the case where hidden children can be shown again,
as _getVisibleChildren doesn't filter-out transparent ones, restoring the
pre-commit 0e0574a0 behavior.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1336

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559

js/ui/iconGrid.js

index 4d32e8bcf8fafc47707781532a95d48fe938e899..d428897a9e5105a4af73b2e5bc894720328cc71a 100644 (file)
@@ -331,10 +331,10 @@ var IconGrid = GObject.registerClass({
 
             if (this._rowLimit && rowIndex >= this._rowLimit ||
                 this._fillParent && childBox.y2 > availHeight - this.bottomPadding) {
-                children[i].hide();
+                children[i].opacity = 0;
             } else {
+                children[i].opacity = 255;
                 children[i].allocate(childBox, flags);
-                children[i].show();
             }
 
             columnIndex++;
@@ -378,7 +378,7 @@ var IconGrid = GObject.registerClass({
              child != null;
              child = child.get_next_sibling()) {
 
-            if (!child.visible)
+            if (!child.visible || !child.opacity)
                 continue;
 
             let childVolume = child.get_transformed_paint_volume(this);